package com.xoa.dao.workflow;

import com.xoa.dao.base.BaseMapper;
import com.xoa.model.workflow.FlowRunPrcs;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface FlowRunPrcsMapper extends BaseMapper<FlowRunPrcs> {

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/24 20:16
     * 方法介绍:   查询完结工作
     * 参数说明:
     *
     * @return
     */
    public List<FlowRunPrcs> selectEnd(Map<String, Object> maps);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/25 15:46
     * 方法介绍:   查询挂起工作
     * 参数说明:
     *
     * @return
     */
    public List<FlowRunPrcs> selectHang(Map<String, Object> maps);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/25 17:04
     * 方法介绍:   查询所有工作
     * 参数说明:
     *
     * @return
     */
    public List<FlowRunPrcs> selectAll(Map<String, Object> maps);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/1 10:45
     * 方法介绍:   查询上一步办结时间
     * 参数说明:
     *
     * @return
     */
    public String findTime(@Param("prcsId") Integer prcsId, @Param("runId") Integer runId);


    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/1 10:45
     * 方法介绍:   查询上一步办结时间
     * 参数说明:
     *
     * @return
     */
    public String findTimeBy(Map<String, Object> maps);

    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017/6/1 17:03
     * 方法介绍:   根据runId查询流程实例步骤信息
     * 参数说明:
     *
     * @return
     */
    public List<FlowRunPrcs> findByRunId(Integer runId);

    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017/6/2 11:44
     * 方法介绍:   根据流程实例Id和流程实例步骤id查询
     * 参数说明:
     *
     * @return
     */
    public List<FlowRunPrcs> selectfrp(Map<String, Object> maps);

    int deleteByPrimaryKey(Integer id);

    int insert(FlowRunPrcs record);

    int insertSelective(FlowRunPrcs record);

    FlowRunPrcs selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(FlowRunPrcs record);

    int updateByPrimaryKey(FlowRunPrcs record);

    int updateSome(Map<String, Object> map);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/20 13:49
     * 方法介绍:   删除第一步
     * 参数说明:
     *
     * @return
     */
    public void deleteWork(FlowRunPrcs flowRunPrcs);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/20 13:50
     * 方法介绍:   查询是否为第一步
     * 参数说明:
     *
     * @return
     */
    public Integer selectPrcs(@Param("id") Integer id);

    public List<FlowRunPrcs> findlessRunId(Map<String, Object> maps);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/7/14 14:08
     * 方法介绍:   根据用户登录帐号和经办流程流水号查询该条所有信息
     * 参数说明:
     *
     * @return
     */
    public List<FlowRunPrcs> selectMyAll(@Param("userId") String userId, @Param("runId") Integer runId);


    List<FlowRunPrcs> selectAllByRunId(Integer runId);


    List<FlowRunPrcs> getFlowRunReacsAllByRunId(String runId);

    FlowRunPrcs selectqueryByRunId(@Param("prcsId") String prcsId, @Param("runId") Integer runId);


    int cancelRunPrcs(Map<String, Object> map);

    FlowRunPrcs queryByRunId(@Param("runId") Integer runId);

    int deleteByRunIds(List<Integer> runIds);


    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/25 17:04
     * 方法介绍:   查询委托工作
     * 参数说明:
     *
     * @return
     */
    public List<FlowRunPrcs> entrustWork(Map<String, Object> maps);


    /**
     * 创建作者:   zlf
     * 创建日期:   2017/11/9 17:04
     * 方法介绍:   查询是否强制转交
     * 参数说明:
     *
     * @return
     */
    public Integer checkGatherNode(Map<String, Object> maps);


    public List<FlowRunPrcs> monitoring(Map<String, Object> maps);


    public List<FlowRunPrcs> findNextFrp(Map<String, Object> maps);

    public List<FlowRunPrcs> findMaxFrp(Integer runId);

    /**
     * 查询某个未办结的流程
     *
     * @param flowRunPrcs
     * @return
     */
    public List<String> selNotRunById(FlowRunPrcs flowRunPrcs);

    public FlowRunPrcs selPrcsByNotRun(Map<String, Object> map);

    int upPrcsById(FlowRunPrcs flowRunPrcs);

    public int upPrcsStatusById(FlowRunPrcs flowRunPrcs);

    /**
     * 获取flowRunPrcs 中opFlag
     *
     * @param map
     * @return
     */
    List<FlowRunPrcs> getFlowRunPrecsOpFlag(Map map);

    /**
     * 获取增签经办人
     *
     * @param map
     * @return
     */

    List<FlowRunPrcs> getFlowRunPrecsUser(Map map);

    String getAllUserName(@Param("runId") String runId, @Param("userId") String userId);

    //查找是否有父流程。
    FlowRunPrcs selectParentFlowRunPrcs(Map<String, Object> param);
    //修改父流程实例的接收时间状态等。。。
    int updateFlowPrcs(Map maps);

    List<FlowRunPrcs> findFlowRunPrcsByUserId(Map map);

    int updateFlow(FlowRunPrcs flowRunPrcs);

    int updateFlowPrcsByAssign(FlowRunPrcs flowRunPrcs);

    FlowRunPrcs selectfrpByChildRun(Map<String, Object> maps);

    public FlowRunPrcs selectbyOpaddUser(Map<String, Object> maps);
    //按照年份查询数据（流程门户显示）
    public List<Map<String, Object>> selectbyYear(Map<String, Object> maps);

    List<FlowRunPrcs> queryopaddUserOver(FlowRunPrcs flowRunPrcs);

    public List<Map<String, Object>> selectCountByFlowId(Map<String, Object> maps);

    int updateState(FlowRunPrcs flowRunPrcs);

    List<FlowRunPrcs> stepStatus(@Param("runId") Integer runId, @Param("step") Integer step);

    List<FlowRunPrcs> getAssign(@Param("runId") Integer runId, @Param("prcsId") Integer prcsId, @Param("flowPrcs") String flowPrcs);

    int updateComment(FlowRunPrcs flowRunPrcs);

    List<String> selectAllUserByRunId(Integer runId);

    public List<FlowRunPrcs> getAllByComment(Map<String, Object> maps);

    List<FlowRunPrcs> selectByRunIdAndPrcsFlag(@Param("runId") String runId, @Param("prcsFlag") String prcsFlag);
}